import numpy as np

def InterceptionPro(info_m, info_t):
    p0 = 0.7
    nt = info_t.shape[0]  # 目标数量
    nm = info_m.shape[0]  # 导弹数量
    
    Vm = info_m[:, 5]    # 导弹速度 (第6列)
    Vt = info_t[:, 4]    # 目标速度 (第5列)
    ThetaM = info_m[:, 3]  # 导弹航向角 (第4列)
    ThetaT = info_t[:, 5]  # 目标航向角 (第6列)
    
    # 初始化矩阵
    LOS = np.zeros((nm, nt))        # 视线角
    initial_r_MT = np.zeros((nm, nt))  # 初始距离
    EtaM = np.zeros((nm, nt))       # 导弹前置角
    EtaT = np.zeros((nm, nt))       # 目标前置角
    
    # 计算视线角(LOS)和初始距离
    for i in range(nm):
        for j in range(nt):
            dx = info_m[i, 0] - info_t[j, 0]  # x方向差值
            dy = info_m[i, 1] - info_t[j, 1]  # y方向差值
            # 计算极坐标角度和距离
            THETA = np.arctan2(dy, dx)
            RHO = np.hypot(dx, dy)
            LOS[i, j] = THETA
            initial_r_MT[i, j] = RHO
    
    # 将弧度转换为角度
    LOS = LOS * 180 / np.pi
    
    # 计算前置角
    for i in range(nm):
        for j in range(nt):
            EtaM[i, j] = LOS[i, j] - ThetaM[i]
            EtaT[i, j] = LOS[i, j] - ThetaT[j]
    
    # 计算三角函数值
    SEtaM = np.sin(np.radians(EtaM))
    CEtaM = np.cos(np.radians(EtaM))
    SEtaT = np.sin(np.radians(EtaT))
    CEtaT = np.cos(np.radians(EtaT))
    
    # 计算速度分量
    VSM = Vm[:, np.newaxis] * SEtaM  # 导弹速度法向分量
    VCM = Vm[:, np.newaxis] * CEtaM  # 导弹速度切向分量
    VST = Vt[np.newaxis, :] * SEtaT  # 目标速度法向分量
    VCT = Vt[np.newaxis, :] * CEtaT  # 目标速度切向分量
    
    # 计算视线角变化率
    q = np.abs(VST - VSM) / initial_r_MT
    
    # 计算剩余飞行时间
    Tgo = initial_r_MT / np.abs(VCT - VCM)
    
    # 计算全局平均值
    averageq = np.mean(q)
    averageTgo = np.mean(Tgo)
    
    # 计算基于视线角变化率的概率
    Pq = p0 * np.exp(-0.5 * (q / averageq) ** 2)
    
    # 计算基于剩余时间的概率
    Ptgo = p0 * np.exp(-0.5 * (Tgo / averageTgo) ** 2)
    
    # 计算综合拦截概率
    P = 0.8 * Pq + 0.2 * Ptgo
    
    # 转置矩阵以匹配MATLAB输出
    return P.T